package com.distributed.netty.server;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;
import org.apache.log4j.Logger;

public class HeartBeatServerHandler extends ChannelInboundHandlerAdapter  {
	static int readIdleTimes=0;
	Logger LOG=Logger.getLogger(HeartBeatServerHandler.class);
	@Override//服务端心跳异常触发的函数
	public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
		IdleStateEvent event=(IdleStateEvent) evt;//触发的事件对象
		String eventType = null;//创建一个字符串变量用来装触发的事件信息

			switch (event.state()){
	            case READER_IDLE:
	                eventType = "读空闲";//客户端没有数据发送过来
	    	        LOG.debug(ctx.channel().remoteAddress() + "超时事件：" +eventType);
	                readIdleTimes ++; // 读空闲的计数加1
	                break;
	            case WRITER_IDLE:
	                eventType = "写空闲";
	                // 不处理
	                break;
	            case ALL_IDLE:
	                eventType ="读写空闲";
	                // 不处理
	                break;
	        }

	        if(readIdleTimes > 3){
				LOG.debug("服务端心跳响应：读空闲超过3次，关闭当前连接");
	            LOG.debug("服务端心跳响应："+ctx.channel().remoteAddress()+"这个客户端下线了");
	            ctx.channel().writeAndFlush("下线");

	            ctx.channel().close();
	        }
	}

}
